package com.bjpowerrnode.javase.array;
/*
Array
    1、java语言语言中数组是一种引用数据类型，不属于基本数据类型。数组的父类是Object。
    2、数组实际上是一个容器，可以同时容纳多个元素。
    3、数组当中可以存储基本数据类型的数据，也可以存储引用数据类型的数据。
    4、数组因为是引用数据类型，所以数组对象存储在堆内存当中。
    5、数组中存储的是java对象的话，实际上存储的是内存地址。数组不能直接存储java对象。
    6、数组一单创建，在java中规定，长度不可以变。
    7、数组的分类：一维数组，二维数组，。。。
    8、所有的数组都有length属性（java自带的），用来获取数组中元素的个数
    9、java中的数组要求数组元素中数据统一。
    10、数组中数组的内存地址是连续，实际上数组是一种数据结构。但是数组中存储元素的内存地址不一定连续。
    11、所有数组的的内存地址为第一个数组的地址。
    12、数组元素从0开始，最后一个数组的下表为length-1。
    13、数组这种数据的优缺点;
        优点：查询/查找/检索某个坐标下的元素时效率很高。
            第一：每一个元素的内存地址在空间存储上是连续的
            第二：每一个元素类型相同，所以占中空间大小一致
            第三：知道首个元素的地址，其它元素的地址都可以找到。

            数组中存储100个元素，或者存储100万个元素，在元素查询/搜索方面
            效率是一样的，因为数组中元素查找到的时候不会一个个的找，而是通过
            数学表达式计算出来的，算出其内存地址直接定为。

        缺点：
        第一：由于为了保证数组中每个元素的内存地址是连续的，所以在数组上随机
            删除或者添加元素的时候，效率较低。因为随机曾删会涉及到后面元素向
            前向后位移的操作。
       第二：数组很难存储大容量数据，因为很难在内存空间中找到一块特别大的连续空间。

      注意：对数组中最后一个元素的增删对效率没有影响

     14、怎么定义、声明一个一维数组？
        语法格式：
            int[] array1;
            double[] array2;
            boolean[] array3;
            String[] array4;
            Object[] array5;
    15、怎么初始化一个一维数组？
        包括两种格式：静态初始化一维数组，动态初始化一维数组。
            静态初始化语法格式:
                int[] array = {100,200};
            动态初始化语法格式：
                int[] array = new int[5]//这里的5表示的是数组的长度
                                        //初始化5个长度到的int类型数组，每个元素默认为null

 */
public class ArrayTest01 {
    public static void main(String[] args) {
        //声明一个int类型的数组，使用静态初始化方法

        int[] a1 = {1,3,5,7};//java的方式
        //int a1[] = {1,3,5,7};//c++的方式,虽然可以但是不建议

        //所有的数组都有length属性
        System.out.println("数组的长度为：" + a1.length);//注意length是数组的属性，不需要小括号

        //数组中每一个元素都有下标
        System.out.println("第一个元素：" + a1[0]);
        System.out.println("最后一个元素:" + a1[a1.length - 1]);

        //存（改）
        a1[0] = 111;
        a1[a1.length -1 ] = 222;

        System.out.println("第一个元素：" + a1[0]);
        System.out.println("最后一个元素:" + a1[a1.length - 1]);

        //一维数组遍历
        for(int i = 0; i<a1.length; i++){
            System.out.println(a1[i]);
        }

        //从最后一个元素遍历的到一个元素
        for(int i = a1.length - 1; i >= 0; i-- ){
            System.out.println(a1[i]);
        }
    }
}
